// 导入数据库
const db = require('../db/index')
    // 加密的第三方中间件
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
    // 登录的处理函数
module.exports.login = (req, res) => {
        const userinfo = req.body;
        console.log(userinfo);
        const sql = `select* from ev_users where username=?`
        db.query(sql, userinfo.username, function(err, results) {

            // 执行 SQL 语句失败
            if (err) return res.cc(err)
                // 执行 SQL 语句成功，但是查询到数据条数不等于 1
            if (results.length !== 1) return res.cc('登录失败！')
                // TODO：判断用户输入的登录密码是否和数据库中的密码一致
                // 拿着用户输入的密码,和数据库中存储的密码进行对比
            const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)

            // 如果对比的结果等于 false, 则证明用户输入的密码错误
            if (!compareResult) {
                return res.cc('登录失败！')
            }
            // console.log(results);是个数组包含一个对象
            // TODO：登录成功，生成 Token 字符串
            // 剔除完毕之后，user 中只保留了用户的 id, username, nickname, email 这四个属性的值
            const secretKey = 'itheima No1 ^_^';
            // const userzzzzz = {...results[0], password: '' };
            const str = jwt.sign(userzzzzz, secretKey, { expiresIn: '18h' })
            res.send({
                status: 200,
                message: '登录成功',
                token: 'Bearer ' + str, // 要发送给客户端的 token 字符串 //在请求头中添加Authorization Bearer 空格 +token

            });
        })


    }
    // 注册用户的处理函数
module.exports.regUser = (req, res) => {
    // 判断用户名和密码是否为空
    const userinfo = req.body;
    // 对用户的密码,进行 bcrype 加密，返回值是加密之后的密码字符串
    userinfo.password = bcrypt.hashSync(userinfo.password, 10)
        // console.log(userinfo);

    // if (!userinfo.username || !userinfo.password) {
    //     return res.send('请输入用户信息')
    // }
    const SqlSelect = 'select username from ev_users where username=?';
    db.query(SqlSelect, [userinfo.username], (err, datastr) => {
        if (err) return res.send(err.message);
        if (datastr.length > 0) {
            // return res.send({ status: 1, message: '用户名被占用' })
            return res.cc('用户名被占用')
        }
        // TODO: 用户名可用，继续后续流程..
        const Sqlinsert = "insert into ev_users set ?";
        db.query(Sqlinsert, userinfo, (err, result) => {
            if (err) {
                // return res.send(err.message);
                return res.cc(err)
            }
            if (result.affectedRows !== 1) {
                // return res.send({
                //     status: 1,
                //     message: "数据插失败",
                // })
                return res.cc("数据插失败 ")
            };
            res.send({
                status: 0,
                message: "数据插入成功",
            });
        })
    })

}